
class SessionStorage {
  constructor (prefix = '') {
    this.prefix = prefix
  }

  // 存储数据，支持设置过期时间（单位：分钟）
  setItem (key, value, ttlMinutes = null) {
    try {
      const item = {
        value: JSON.stringify(value),
        expires: ttlMinutes ? Date.now() + ttlMinutes * 60 * 1000 : null // 计算过期时间戳
      }
      sessionStorage.setItem(this.prefix + key, JSON.stringify(item))
    } catch (e) {
      console.error('Failed to save data to sessionStorage:', e)
    }
  }

  // 获取数据，检查是否已过期
  getItem (key) {
    const itemStr = sessionStorage.getItem(this.prefix + key)
    if (!itemStr) return null

    try {
      const item = JSON.parse(itemStr)
      if (this.isExpired(item.expires)) {
        this.removeItem(key) // 数据已过期，删除
        return null
      }
      return JSON.parse(item.value)
    } catch (e) {
      console.error('Failed to get data from sessionStorage:', e)
      return null
    }
  }

  // 检查数据是否过期
  isExpired (expires) {
    return expires !== null && Date.now() > expires
  }

  // 删除单个数据
  removeItem (key) {
    sessionStorage.removeItem(this.prefix + key)
  }

  // 清除所有带有前缀的数据
  clear () {
    for (let i = sessionStorage.length - 1; i >= 0; i--) {
      const key = sessionStorage.key(i)
      if (key && key.startsWith(this.prefix)) {
        sessionStorage.removeItem(key)
      }
    }
  }

  // 检查某个键是否存在
  hasKey (key) {
    return sessionStorage.hasOwnProperty(this.prefix + key)
  }
}

// 使用示例
const session = new SessionStorage('session_')

session.setItem('userInfo', { name: 'Alice', age: 28 }, 30) // 存储数据，设置30分钟后过期
const userInfo = session.getItem('userInfo') // 获取数据
console.log(userInfo)

// 其他方法使用...
